/*
 * Indiana University Community Grid Computing Lab Software License,Version 1.1
 *
 * Copyright (c) 2002 Community Grid Computing Lab, Indiana University. 
 * All rights reserved.		
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *      "This product includes software developed by the Indiana University 
 *       Community Grid Computing Lab (http://www.communitygrids.iu.edu/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Indiana Univeristy","Indiana Univeristy Pervasive Techonology
 *    Labs" and  "Indiana Univeristy Community Grid Computing Lab" must not be
 *    used to endorse or promote products derived from this software without 
 *    prior written permission. For written permission, please contact 
 *    http://www.communitygrids.iu.edu/.
 *
 * 5. Products derived from this software may not use "Indiana
 *    University" name nor may "Indiana University" appear in their name,
 *    without prior written permission of the Indiana University.
 *
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
 * INDIANA UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package cgl.sensorgrid.filters;

import cgl.narada.event.*;
import java.io.IOException;
import java.io.EOFException;
import java.io.*;
import cgl.narada.service.*;

public class FileSenderFilter extends Filter{

    private String file2send;

    public FileSenderFilter(String[] argsa, String[] argsb) {
        this.initialize(argsa);
        if(argsb.length==1){
            if(argsb[0]!=null && !argsb[0].equalsIgnoreCase(""))
                file2send = argsb[0];
        }
    }


    public void onEvent(NBEvent nbEvent){

    }

    public void sendFile(String file2send){
        byte[] buf = new byte[2048];
      try {
          DataInputStream dis = new DataInputStream(new FileInputStream(file2send));

          int count;
          byte[] by;
          startPublish();
          while (true) {
              count = 0;
              if (dis.available() > -1) {
                  count = dis.read(buf);
                  if (count <= 0) {
                      System.out.println("EOF");
                      break;
                  }
                  by = new byte[count];
                  if (buf.length > 0) {
                      System.arraycopy(buf, 0, by, 0, count);
                      if (by != null && by.length > 0) {
                          publishData(by);
//                          try {
//                              Thread.sleep(50);
//                          } catch (InterruptedException ex) {
//                              ex.printStackTrace();
//                          }
                          //System.out.println(new String(by));
//                          System.out.println("Bytes published = " + count);
                      }
                      count = 0;
                  } else {
                      System.err.println("NULL RYO Message received");
                  }
                  buf = new byte[2048];
              }
          }
          endPublish();
        try {
            closeBrokerConnection(this.getID());
        } catch (ServiceException ex1) {
            ex1.printStackTrace();
        }
        } catch (IOException e) {
            if (e instanceof EOFException)
                System.out.println("Input File finished...");
            else
                System.err.println("Error: " + e);
        }
        System.exit(0);
    }

    public void receiveFile(String file2receive){
    }

    public static void main(String[] args) {
        try {
            String[] argsa = {"niotcp",
                             "gf2.ucs.indiana.edu",
                             "3045",
                             "",
                             "/SOPAC/GPS/OCRTN/POS"};
            String[] argsb = {
                    "C:/temp/parkfield/rdahmm-hpsearch/CARH/CARH-2006_03_20-05_07_23_PM"};
            FileSenderFilter f = new FileSenderFilter(argsa, argsb);
            f.sendFile(
                    "C:/temp/parkfield/rdahmm-hpsearch/CARH/CARH-2006_03_20-05_07_23_PM.xyz");

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
